home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-04-08 | 2.5 KB | 140 lines | [TEXT/MPS ] |
-
- #include "UDP.h"
- #include "Driver.h"
-
- #include <myUtils.h>
-
- #include <Memory.h>
-
- StreamPtr
- udpCreate(int bufSize, udp_port* local, UDPNotifyProc asr, Ptr usrData)
- {
- UDPiopb pb;
- OSErr theErr;
- Ptr buffer;
-
- buffer = NewPtr(bufSize);
- if (MemError() != noErr)
- return MemError();
-
- pb.csCode = UDPCreate;
- pb.ioCRefNum = gRef.GetRef();
- pb.ioCompletion = nil;
-
- pb.csParam.create.rcvBuff = buffer;
- pb.csParam.create.rcvBuffLen = bufSize;
- pb.csParam.create.notifyProc = asr;
- pb.csParam.create.userDataPtr = usrData;
- pb.csParam.create.localPort = *local;
-
- theErr = PBControlSync((ParmBlkPtr) &pb);
-
- if (theErr == noErr) {
- *local = pb.csParam.create.localPort;
- return pb.udpStream;
- }
- else
- return (StreamPtr) theErr;
- }
-
- OSErr
- udpRead(StreamPtr stream, void* buffer, short* len)
- {
- OSErr theErr;
- UDPiopb pb;
- short in;
-
- BlockClear(&pb, sizeof(pb));
-
- pb.ioCRefNum = gRef.GetRef();
- pb.udpStream = stream;
- pb.csCode = UDPRead;
-
- theErr = PBControlSync((ParmBlkPtr) &pb);
-
- if (theErr == noErr) {
- in = pb.csParam.receive.rcvBuffLen;
- if (in > *len)
- in = *len;
-
- BlockMove(pb.csParam.receive.rcvBuff, buffer, in);
- *len = in;
-
- if (in) {
- pb.csCode = UDPBfrReturn;
- theErr = PBControlSync((ParmBlkPtr) &pb);
- }
- }
-
- return theErr;
- }
-
- OSErr
- udpWrite(StreamPtr stream, void* buffer, short len, ip_addr host, udp_port port)
- {
- typedef struct OneWDS {
- wdsEntry wds;
- unsigned short zero;
- } OneWDS;
-
- UDPiopb pb;
- OneWDS wds;
-
- BlockClear(&pb, sizeof(pb));
-
- wds.zero = 0;
- wds.wds.ptr = buffer;
- wds.wds.length = len;
-
- pb.ioCRefNum = gRef.GetRef();
- pb.udpStream = stream;
- pb.csCode = UDPWrite;
-
- pb.csParam.send.remoteHost = host;
- pb.csParam.send.remotePort = port;
- pb.csParam.send.wdsPtr = (Ptr) &wds;
- pb.csParam.send.checkSum = 0;
-
- return PBControlSync((ParmBlkPtr) &pb);
- }
-
- OSErr
- udpWriteWDS(StreamPtr stream, wdsEntry* wds, ip_addr host, udp_port port)
- {
- UDPiopb pb;
-
- BlockClear(&pb, sizeof(pb));
-
- pb.ioCRefNum = gRef.GetRef();
- pb.udpStream = stream;
- pb.csCode = UDPWrite;
-
- pb.csParam.send.remoteHost = host;
- pb.csParam.send.remotePort = port;
- pb.csParam.send.wdsPtr = (Ptr) wds;
- pb.csParam.send.checkSum = 0;
-
- return PBControlSync((ParmBlkPtr) &pb);
- }
-
- OSErr
- udpRelease(StreamPtr stream)
- {
- UDPiopb pb;
- OSErr theErr;
-
- pb.ioCompletion = nil;
- pb.ioCRefNum = gRef.GetRef();
- pb.udpStream = stream;
- pb.csCode = UDPRelease;
-
- theErr = PBControlSync((ParmBlkPtr) &pb);
-
- if (theErr == noErr) {
- DisposePtr(pb.csParam.create.rcvBuff);
- theErr = MemError();
- }
-
- return theErr;
- }
-